[PowerShell] 新しいAWS Tools for PowerShellのプレビュー版がリリースされました
しばたです。
先週AWSより新しいAWS Tools for PowerShellのプレビュー版をリリースしたという記事が公開されました。
本記事ではこちらの内容をベースに新しいAWS Tools for PowerShellの紹介をしていきます。
現在のモジュールの問題点
最初に新しいAWS Tools for PowerShellがリリースされるに至るまでの事情を説明します。
現在のAWS Tools for PowerShellはWindows PowerShell向けのAWSPowerShellモジュールとPowerShell Core向けのAWSPowerShell.NetCoreモジュールの2種類存在しており、各モジュールは1つのモジュールですべてのAWSサービスをサポートするつくりとなっています。
2012年にAWS Tools for PowerShellがリリースされてから2019年8月現在に至るまでにAWSのサービスは増え続け、AWS Tools for PowerShellでサポートされるサービスは175、コマンドレット数は約6000に至るまでに増えています。
# AWSPowerShell.NetCoreのバージョン
C:\> Get-InstalledModule -Name AWSPowerShell.NetCore | Select-Object Version
Version
-------
3.3.553.0
# AWSPowerShell.NetCore がサポートするサービス数
C:\> Get-AWSPowerShellVersion -ListServiceVersionInfo | Select-Object -Skip 1 | Measure-Object | Select-Object Count
Count
-----
175
# 公開されているコマンドレット数
C:\> Get-AWSCmdletName | Measure-Object | Select-Object Count
Count
-----
5893
これはPowerShellのモジュールとしてはあまりも巨大であり、
Import-Module
による初期ロードに異常に時間がかかる様になっている- コマンドレット数が多すぎてモジュールの自動ロードに失敗する
- 詳細は以前の記事をご覧ください : PowerShell CoreでAWSPowerShell.NetCoreモジュールが自動ロードされない問題と回避策について
といった問題を抱えている現状があります。
新しいAWS Tools for PowerShell (AWS.Tools.*)
これらの問題に対応するために新しい形のモジュールがプレビューリリースされました。
新しいモジュールはサービス毎でモジュールを分割し、AWS.Tools.[個別のサービス名]
という名前で提供されています。
先述のブログによればAWS SDK for .NETと同じアプローチに切り替えたとのことですが、PowerShellに親しんでいる人にとってはAzure PowerShellと同じ方式と言った方がわかりやすいでしょう。
AWS.Tools.Common
個別のサービスとは別にInitialize-AWSDefaultConfiguration
といった初期化機能や共通機能についてはAWS.Tools.Commonというモジュールに保存されています。
このモジュールは各サービスの依存モジュールとなっており、サービス毎のモジュールをインストールした際に自動で追加される様になっています。
AWS.Tools.Commonモジュールで提供されるコマンドレットは以下。
C:\> Get-Command -Module AWS.Tools.Common | Select-Object CommandType, Name
CommandType Name
----------- ----
Alias Clear-AWSCredentials
Alias Clear-AWSDefaults
Alias Get-AWSCredentials
Alias Initialize-AWSDefaults
Alias New-AWSCredentials
Alias Set-AWSCredentials
Cmdlet Add-AWSLoggingListener
Cmdlet Clear-AWSCredential
Cmdlet Clear-AWSDefaultConfiguration
Cmdlet Clear-AWSHistory
Cmdlet Clear-AWSProxy
Cmdlet Clear-DefaultAWSRegion
Cmdlet Disable-AWSMetricsLogging
Cmdlet Enable-AWSMetricsLogging
Cmdlet Get-AWSCmdletName
Cmdlet Get-AWSCredential
Cmdlet Get-AWSPowerShellVersion
Cmdlet Get-AWSPublicIpAddressRange
Cmdlet Get-AWSRegion
Cmdlet Get-DefaultAWSRegion
Cmdlet Initialize-AWSDefaultConfiguration
Cmdlet New-AWSCredential
Cmdlet Remove-AWSCredentialProfile
Cmdlet Remove-AWSLoggingListener
Cmdlet Set-AWSCredential
Cmdlet Set-AWSHistoryConfiguration
Cmdlet Set-AWSProxy
Cmdlet Set-AWSResponseLogging
Cmdlet Set-AWSSamlEndpoint
Cmdlet Set-AWSSamlRoleProfile
Cmdlet Set-DefaultAWSRegion
バージョン付けおよび互換性について
新しいAWS Tools for PowerShellのバージョンについてはこれまでのAWSPowerShellモジュールとAWSPowerShell.NetCoreに倣う形となっており、提供するコマンドレットも変わりありません。
現時点ではモジュール構成のみ変わると考えて問題ないでしょう。
その他変更点
ただし、モジュールを更新するのに合わせて古いAPI向けの機能が削除されます。
先述のブログによると以下の点が変更されるそうです。
CloudHSM
(HSM)の機能は削除され、CloudHSMV2
(HSM2) に更新ElasticLoadBalancing
(ELB) の機能は削除され、ElasticLoadBalancingV2
(ELB2)のみを残す形にCloudWatchEvents
(CWE) の機能は削除され、EventBridge
(EVB) に更新KinesisAnalytics
(KINA) の機能は削除され、KinesisAnalyticsV2
(KINA2) のみを残す形に
モジュール一覧
ちょっと長いですが、現在公開されているモジュールの一覧は以下のコマンドで取得できます。
前項で触れた廃止した機能もあるため165モジュールとなっています。
# Find-Module -Name AWS.Tools.*の結果があまり安定しない...
C:\> $modules = Find-Module -Name AWS.Tools.*
C:\> $modules | Select-Object Name, Version | Sort-Object -Property Name
Name Version
---- -------
AWS.Tools.ACMPCA 3.3.563.1
AWS.Tools.AlexaForBusiness 3.3.563.1
AWS.Tools.Amplify 3.3.563.1
AWS.Tools.APIGateway 3.3.563.1
AWS.Tools.ApiGatewayV2 3.3.563.1
AWS.Tools.ApplicationAutoScaling 3.3.563.1
AWS.Tools.ApplicationDiscoveryService 3.3.563.1
AWS.Tools.ApplicationInsights 3.3.563.1
AWS.Tools.AppMesh 3.3.563.1
AWS.Tools.AppSync 3.3.563.1
AWS.Tools.Athena 3.3.563.1
AWS.Tools.AutoScaling 3.3.563.1
AWS.Tools.AWSHealth 3.3.563.1
AWS.Tools.AWSMarketplaceCommerceAnalytics 3.3.563.1
AWS.Tools.AWSMarketplaceMetering 3.3.563.1
AWS.Tools.AWSSupport 3.3.563.1
AWS.Tools.Backup 3.3.563.1
AWS.Tools.Batch 3.3.563.1
AWS.Tools.Budgets 3.3.563.1
AWS.Tools.CertificateManager 3.3.563.1
AWS.Tools.Chime 3.3.563.1
AWS.Tools.Cloud9 3.3.563.1
AWS.Tools.CloudDirectory 3.3.563.1
AWS.Tools.CloudFormation 3.3.563.1
AWS.Tools.CloudFront 3.3.563.1
AWS.Tools.CloudHSMV2 3.3.563.1
AWS.Tools.CloudSearch 3.3.563.1
AWS.Tools.CloudSearchDomain 3.3.563.1
AWS.Tools.CloudTrail 3.3.563.1
AWS.Tools.CloudWatchLogs 3.3.563.1
AWS.Tools.CodeBuild 3.3.563.1
AWS.Tools.CodeCommit 3.3.563.1
AWS.Tools.CodeDeploy 3.3.563.1
AWS.Tools.CodePipeline 3.3.563.1
AWS.Tools.CodeStar 3.3.563.1
AWS.Tools.CognitoIdentity 3.3.563.1
AWS.Tools.CognitoIdentityProvider 3.3.563.1
AWS.Tools.CognitoSync 3.3.563.1
AWS.Tools.Common 3.3.563.1
AWS.Tools.Comprehend 3.3.563.1
AWS.Tools.ComprehendMedical 3.3.563.1
AWS.Tools.ConfigService 3.3.563.1
AWS.Tools.Connect 3.3.563.1
AWS.Tools.CostAndUsageReport 3.3.563.1
AWS.Tools.CostExplorer 3.3.563.1
AWS.Tools.DatabaseMigrationService 3.3.563.1
AWS.Tools.DataPipeline 3.3.563.1
AWS.Tools.DataSync 3.3.563.1
AWS.Tools.DAX 3.3.563.1
AWS.Tools.DeviceFarm 3.3.563.1
AWS.Tools.DirectConnect 3.3.563.1
AWS.Tools.DirectoryService 3.3.563.1
AWS.Tools.DLM 3.3.563.1
AWS.Tools.DocDB 3.3.563.1
AWS.Tools.DynamoDBv2 3.3.563.1
AWS.Tools.EC2 3.3.563.1
AWS.Tools.ECR 3.3.563.1
AWS.Tools.ECS 3.3.563.1
AWS.Tools.EKS 3.3.563.1
AWS.Tools.ElastiCache 3.3.563.1
AWS.Tools.ElasticBeanstalk 3.3.563.1
AWS.Tools.ElasticFileSystem 3.3.563.1
AWS.Tools.ElasticLoadBalancingV2 3.3.563.1
AWS.Tools.ElasticMapReduce 3.3.563.1
AWS.Tools.Elasticsearch 3.3.563.1
AWS.Tools.ElasticTranscoder 3.3.563.1
AWS.Tools.EventBridge 3.3.563.1
AWS.Tools.FMS 3.3.563.1
AWS.Tools.FSx 3.3.563.1
AWS.Tools.GameLift 3.3.563.1
AWS.Tools.Glacier 3.3.563.1
AWS.Tools.GlobalAccelerator 3.3.563.1
AWS.Tools.Glue 3.3.563.1
AWS.Tools.Greengrass 3.3.563.1
AWS.Tools.GroundStation 3.3.563.1
AWS.Tools.GuardDuty 3.3.563.1
AWS.Tools.IdentityManagement 3.3.563.1
AWS.Tools.ImportExport 3.3.563.1
AWS.Tools.Inspector 3.3.563.1
AWS.Tools.IoT 3.3.563.1
AWS.Tools.IoTEvents 3.3.563.1
AWS.Tools.IoTEventsData 3.3.563.1
AWS.Tools.IoTJobsDataPlane 3.3.563.1
AWS.Tools.IoTThingsGraph 3.3.563.1
AWS.Tools.Kafka 3.3.563.1
AWS.Tools.KeyManagementService 3.3.563.1
AWS.Tools.Kinesis 3.3.563.1
AWS.Tools.KinesisFirehose 3.3.563.1
AWS.Tools.KinesisVideo 3.3.563.1
AWS.Tools.KinesisVideoMedia 3.3.563.1
AWS.Tools.Lambda 3.3.563.1
AWS.Tools.Lex 3.3.563.1
AWS.Tools.LexModelBuildingService 3.3.563.1
AWS.Tools.LicenseManager 3.3.563.1
AWS.Tools.Lightsail 3.3.563.1
AWS.Tools.MachineLearning 3.3.563.1
AWS.Tools.Macie 3.3.563.1
AWS.Tools.ManagedBlockchain 3.3.563.1
AWS.Tools.MarketplaceEntitlementService 3.3.563.1
AWS.Tools.MediaConnect 3.3.563.1
AWS.Tools.MediaLive 3.3.563.1
AWS.Tools.MediaPackage 3.3.563.1
AWS.Tools.MediaPackageVod 3.3.563.1
AWS.Tools.MediaStore 3.3.563.1
AWS.Tools.MediaStoreData 3.3.563.1
AWS.Tools.MediaTailor 3.3.563.1
AWS.Tools.MigrationHub 3.3.563.1
AWS.Tools.Mobile 3.3.563.1
AWS.Tools.MQ 3.3.563.1
AWS.Tools.MTurk 3.3.563.1
AWS.Tools.Neptune 3.3.563.1
AWS.Tools.OpsWorks 3.3.563.1
AWS.Tools.OpsWorksCM 3.3.563.1
AWS.Tools.Organizations 3.3.563.1
AWS.Tools.Personalize 3.3.563.1
AWS.Tools.PersonalizeEvents 3.3.563.1
AWS.Tools.PersonalizeRuntime 3.3.563.1
AWS.Tools.PI 3.3.563.1
AWS.Tools.Pinpoint 3.3.563.1
AWS.Tools.PinpointEmail 3.3.563.1
AWS.Tools.Polly 3.3.563.1
AWS.Tools.Pricing 3.3.563.1
AWS.Tools.QuickSight 3.3.563.1
AWS.Tools.RAM 3.3.563.1
AWS.Tools.RDS 3.3.563.1
AWS.Tools.RDSDataService 3.3.563.1
AWS.Tools.Redshift 3.3.563.1
AWS.Tools.Rekognition 3.3.563.1
AWS.Tools.ResourceGroups 3.3.563.1
AWS.Tools.ResourceGroupsTaggingAPI 3.3.563.1
AWS.Tools.RoboMaker 3.3.563.1
AWS.Tools.Route53 3.3.563.1
AWS.Tools.Route53Domains 3.3.563.1
AWS.Tools.Route53Resolver 3.3.563.1
AWS.Tools.S3 3.3.563.1
AWS.Tools.S3Control 3.3.563.1
AWS.Tools.SageMaker 3.3.563.1
AWS.Tools.SageMakerRuntime 3.3.563.1
AWS.Tools.SecretsManager 3.3.563.1
AWS.Tools.SecurityHub 3.3.563.1
AWS.Tools.SecurityToken 3.3.563.1
AWS.Tools.ServerlessApplicationRepository 3.3.563.1
AWS.Tools.ServerMigrationService 3.3.563.1
AWS.Tools.ServiceCatalog 3.3.563.1
AWS.Tools.ServiceDiscovery 3.3.563.1
AWS.Tools.ServiceQuotas 3.3.563.1
AWS.Tools.SimpleEmail 3.3.563.1
AWS.Tools.SimpleNotificationService 3.3.563.1
AWS.Tools.SimpleSystemsManagement 3.3.563.1
AWS.Tools.SimpleWorkflow 3.3.563.1
AWS.Tools.Snowball 3.3.563.1
AWS.Tools.SQS 3.3.563.1
AWS.Tools.StepFunctions 3.3.563.1
AWS.Tools.StorageGateway 3.3.563.1
AWS.Tools.Textract 3.3.563.1
AWS.Tools.TranscribeService 3.3.563.1
AWS.Tools.Transfer 3.3.563.1
AWS.Tools.Translate 3.3.563.1
AWS.Tools.WAF 3.3.563.1
AWS.Tools.WAFRegional 3.3.563.1
AWS.Tools.WorkDocs 3.3.563.1
AWS.Tools.WorkLink 3.3.563.1
AWS.Tools.WorkMail 3.3.563.1
AWS.Tools.WorkSpaces 3.3.563.1
AWS.Tools.XRay 3.3.563.1
インストール方法
新しいモジュールはPowerShell Galleryからインストール可能で、以下に示す様にInstall-Module
を使いインストールします。
# 個々のモジュール名を指定してインストール
# (AWS.Tools.Commonは全サービス依存なので自動インストールされる)
Install-Module AWS.Tools.EC2 -Scope CurrentUser
ちなみに、Find-Module
を使うとモジュールをまとめてインストールできますがこれは非推奨です。
必要に応じて必要なサービスのモジュールだけをインストールして利用するのが推奨されています。
# ※非推奨※
# すべてのモジュールをまとめてインストール
# インストールに時間がかかるうえ、ロード時間も従来のモジュールより遅くなってしまう
# ※非推奨※
Find-Module -Name AWS.Tools.* | Install-Module -Scope CurrentUser
# 一括アンインストール
Get-InstalledModule -Name AWS.Tools.* | Uninstall-Module -Force
Lambdaで使用する場合は#Requires
文で個々のモジュールを指定します。
#Requires -Modules @{ModuleName='AWS.Tools.Common';ModuleVersion='3.3.563.0'}
#Requires -Modules @{ModuleName='AWS.Tools.S3';ModuleVersion='3.3.563.0'}
コマンドレットの使い方
公開されているコマンドレットはこれまでと変わりませんのでモジュールをインストールした後の使い方については今まで通り変わりありません。
最後に
ざっと説明しましたがこんな感じです。
開発チームはGitHubでのフィードバックを募っていますので気になる点があればガンガンフィードバックするのがよいでしょう。